13. I2C通讯

您所在的位置:网站首页 i2cdetect -l 13. I2C通讯

13. I2C通讯

2024-02-03 05:12| 来源: 网络整理| 查看: 265

13.7. 使能IIC通信接口¶

I.MX6ULL有4个I2C外设,OLED显示屏连接到了它的IIC_1接口,参考前面《fire-config工具简介》章节,使能IIC_1通信接口。

13.7.1. 代码分析¶

oled程序完整源码,请参考本小节配套源码(位于 base_code/linux_app/i2c/oled/sources 目录下)。

oled 写函数 oled_i2c_write ,oled 写函数用于向oled发送命令(配置参数)和要显示的数据,函数原型如下所示:

oled(base_codelinux_appi2coledsourcesmain.c文件)¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22static uint8 oled_i2c_write(int fd, uint8 reg, uint8 val) { /*******************第一部分************************/ int retries; uint8 data[2]; int write_error = 0; data[0] = reg; data[1] = val; ioctl(fd, I2C_SLAVE, OLED_ADDRESS); /*******************第二部分************************/ for (retries = 5; retries; retries--) { if (write(fd, data, 2) == 2) { return 0; } usleep(1000); } return -1; }

函数oled_i2c_write共有三个参数。fd, 打开的设备文件描述符,成功打开IIC设备文件后得到。reg,指定发送到的类型,这里分为命令和数据,在本程序中 只有两个值可选,并且在程序中已经通过宏定义设置了,具体如下:

oled(base_codelinux_appi2coledsourcesmain.c文件)¶ 1 2#define OLED_COMMEND_ADDR 0x00 #define OLED_DATA_ADDR 0x40

reg = 0x00, 表示发送的是命令,更准确的说是OLED配置参数、控制参数。reg = 0x40, 表示发送的是数据。 val , 指定要发送的内容。

函数实现分为两部分。第一部分,将函数入口参数保存到局部变量 data[] 数组中,便于后面执行发送,调用ioctl 函数设置 IIC 从地址既oled 的地址,当oled检测到与自己对应的 地址时就会响应,这时就可通信了。 oled 地址定义如下所示:

oled(base_codelinux_appi2coledsourcesmain.c文件)¶ 1#define OLED_ADDRESS 0x3C //通过调整0R电阻,屏可以0x78和0x7A两个地址 -- 默认0x78

野火 oled 显示屏默认的IIC从地址为0X78,通过调整电阻可以设置为0X7A,需要注意的是,这里的地址是8位地址,最后一位表示的是读或者写。而我们这里要发送的是IIC设备的 7位地址,如上代码所示,我们在宏定义中设置的IIC 地址是由0x78 左移一位得到的。

第二部分,执行发送,如果一次发送不成功则循环发送5次,都失败的情况下返回-1,有一次成功则返回 0 。如果使用的是其他OLED显示屏必须保证支持IIC接口。

oled 初始化函数OLED_Init。oled初始化函数实现很简单。只需要使用open 打开IIC_1接口的设备文件后,使用上面所讲的oled_i2c_write函数写入配置参数即可,部分代码如下所示 完整代码请参考本实验源码。

oled初始化(base_codelinux_appi2coledsourcesmain.c文件)¶ 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25void OLED_Init(void) { /*---------------------第一部分---------------------*/ fd = open("/dev/i2c-0", O_RDWR); // open file and enable read and write if (fd


【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3